{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/mapping-arrays/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Mapping e Arrays\",\n  \"description\": \"Nesse artigo iremos abordar como funcionam os `mapping` e `arrays` no Solidity, bem como, quando utilizá-los em seu contrato inteligente.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Iniciante\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"10/05/2022\",\n  \"modifiedAt\": \"20220510\",\n  \"suburl\": \"mapping-arrays/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos abordar como funcionam os \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"mapping\"), \" e \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"arrays\"), \" no Solidity, bem como, quando utiliz\\xE1-los em seu contrato inteligente.\"), mdx(\"h2\", {\n    \"id\": \"mapping-mapas\"\n  }, \"Mapping (Mapas)\"), mdx(\"p\", null, \"Os mapas s\\xE3o utilizados para guardar um valor X em uma chave Y.\\nS\\xE3o definidos com a sintaxe \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"mapping(keyType => valueType)\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"keyType\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"pode ser definido por qualquer tipo de valor interno, bytes, string, address ou qualquer contrato ou tipo de dado dispon\\xEDvel no Solidity.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"valueType\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"pode ser qualquer tipo de valor, podendo ser at\\xE9 mesmo outro mapa ou matriz.\")))), mdx(\"p\", null, \"Os mapas n\\xE3o podem ser iter\\xE1veis.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract Mapping {\\n    // Mapeamento de endere\\xE7o para uint\\n    mapping(address => uint) public myMap;\\n\\n    function get(address _addr) public view returns (uint) {\\n        // O mapeamento sempre retorna um valor\\n        // Se o valor do mapa nunca foi definido, \\n        // ele ir\\xE1 retornar o valor padr\\xE3o para o tipo de vari\\xE1vel atribuindo\\n        return myMap[_addr];\\n    }\\n\\n    function set(address _addr, uint _i) public {\\n        // Atualiza o valor do mapa para o endere\\xE7o informado\\n        myMap[_addr] = _i;\\n    }\\n\\n    function remove(address _addr) public {\\n        // Deleta o valor existente para o endere\\xE7o informado\\n        delete myMap[_addr];\\n    }\\n}\\n\\ncontract NestedMapping {\\n    // Mapeamento aninhado (mapeamento de endere\\xE7o para outro mapeamento)\\n    mapping(address => mapping(uint => bool)) public nested;\\n\\n    function get(address _addr1, uint _i) public view returns (bool) {\\n        // Voc\\xEA pode obter valores de um mapeamento aninhado\\n        // mesmo quando n\\xE3o \\xE9 inicializado\\n        return nested[_addr1][_i];\\n    }\\n\\n    function set(\\n        address _addr1,\\n        uint _i,\\n        bool _boo\\n    ) public {\\n        nested[_addr1][_i] = _boo;\\n    }\\n\\n    function remove(address _addr1, uint _i) public {\\n        delete nested[_addr1][_i];\\n    }\\n}\\n\")), mdx(\"p\", null, \"Uma das aplica\\xE7\\xF5es onde o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"mapping\"), \" pode ser utilizado, por exemplo, em um jogo onde voc\\xEA precisa armazenar a pontua\\xE7\\xE3o de um determinado jogador\"), mdx(\"p\", null, \"Vamos ver como ficaria esse tipo de aplica\\xE7\\xE3o\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract GameScore {\\n    // Definimos nosso mapa como playerScores que ir\\xE1 \\n    // receber o endere\\xE7o do jogador e a pontua\\xE7\\xE3o\\n    mapping(address => uint) public playerScores;\\n\\n    function getScore(address _addr) public view returns (uint) {\\n        // Iremos retornar o score atual do jogador\\n        return playerScores[_addr];\\n    }\\n\\n    function setScore(address _addr, uint _score) public {\\n        // Atualiza o score do jogador\\n        playerScores[_addr] = _score;\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"array-matrizes\"\n  }, \"Array (Matrizes)\"), mdx(\"p\", null, \"Diferente dos mapas, as matrizes podem armazenar um valor \\xFAnico em uma lista de tipo \\xFAnico, podendo ser definida para qualquer tipo, address, uint, string ou qualquer outro dispon\\xEDvel.\\nUma \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"array\"), \" pode ser definida com um tamanho \\xFAnico definido na compila\\xE7\\xE3o ou um tamanho din\\xE2mico.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract Array {\\n    // Maneiras para definir uma array\\n    uint[] public arr; // Array de tamanho din\\xE2mico\\n    // Array de tamanho din\\xE2mico inicializada com os valores [1, 2, 3]\\n    uint[] public arr2 = [1, 2, 3];\\n\\n    // Array de tamanho fixo, todos os elementos inicializam em 0\\n    uint[10] public myFixedSizeArr;\\n\\n    function get(uint i) public view returns (uint) {\\n        return arr[i];\\n    }\\n\\n    // Solidity pode retornar o array inteiro\\n    // Mas esta fun\\xE7\\xE3o deve ser evitada para arrays \\n    // que podem crescer indefinidamente em tamanho\\n    function getArr() public view returns (uint[] memory) {\\n        return arr;\\n    }\\n\\n    function push(uint i) public {\\n        // Adiciona um valor na matriz\\n        // Isso aumentar\\xE1 o tamanho da matriz em 1\\n        arr.push(i);\\n    }\\n\\n    function pop() public {\\n        // Remove o \\xFAltimo valor adicionado\\n        // Isso diminuir\\xE1 o tamanho da matriz em 1\\n        arr.pop();\\n    }\\n\\n    function getLength() public view returns (uint) {\\n        // Retorna o tamanho da matriz\\n        return arr.length;\\n    }\\n\\n    function remove(uint index) public {\\n        // Excluir o valor de um \\xEDndice n\\xE3o ir\\xE1 diminuir o valor da matriz.\\n        // Ir\\xE1 definir o valor no \\xEDndice para o valor padr\\xE3o do tipo,\\n        // neste caso, o valor ser\\xE1 setado para 0\\n        delete arr[index];\\n    }\\n\\n    function examples() external {\\n        // Cria uma nova matriz na mem\\xF3ria\\n        // Somente matrizes com tamanho fixo podem ser criadas assim\\n        uint[] memory a = new uint[](5);\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"exemplos-de-remoção-de-elemento-da-matriz\"\n  }, \"Exemplos de remo\\xE7\\xE3o de elemento da matriz\"), mdx(\"p\", null, \"Remova um elemento da matriz deslocando os elementos da direita para a esquerda\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract ArrayRemoveByShifting {\\n    // [1, 2, 3] -- remove(1) --> [1, 3, 3] --> [1, 3]\\n    // [1, 2, 3, 4, 5, 6] -- remove(2) --> [1, 2, 4, 5, 6, 6] --> [1, 2, 4, 5, 6]\\n    // [1, 2, 3, 4, 5, 6] -- remove(0) --> [2, 3, 4, 5, 6, 6] --> [2, 3, 4, 5, 6]\\n    // [1] -- remove(0) --> [1] --> []\\n\\n    uint[] public arr;\\n\\n    function remove(uint _index) public {\\n        // Verifica se o \\xEDndice passado existe na matriz, \\n        // se n\\xE3o, ele retorna uma mensagem de erro\\n        require(_index < arr.length, \\\"\\xEDndice fora do limite\\\");\\n\\n        for (uint i = _index; i < arr.length - 1; i++) {\\n            arr[i] = arr[i + 1];\\n        }\\n        arr.pop();\\n    }\\n\\n    function test() external {\\n        arr = [1, 2, 3, 4, 5];\\n        remove(2);\\n        // [1, 2, 4, 5]\\n        assert(arr[0] == 1);\\n        assert(arr[1] == 2);\\n        assert(arr[2] == 4);\\n        assert(arr[3] == 5);\\n        assert(arr.length == 4);\\n\\n        arr = [1];\\n        remove(0);\\n        // []\\n        assert(arr.length == 0);\\n    }\\n}\\n\")), mdx(\"p\", null, \"Substitua um elemento da matriz copiando o \\xFAltimo elemento para o \\xEDndice que ser\\xE1 removido\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract ArrayReplaceFromEnd {\\n    uint[] public arr;\\n\\n    // A remo\\xE7\\xE3o de um elemento da matriz cria uma lacuna vazia.\\n    // Uma maneira de manter o array compacto \\xE9 \\n    // mover o \\xFAltimo elemento para o \\xEDndice que foi removido.\\n    function remove(uint index) public {\\n        // Move o \\xFAltimo elemento para o \\xEDndice que foi removido\\n        arr[index] = arr[arr.length - 1];\\n        // Remove o \\xFAltimo elemento\\n        arr.pop();\\n    }\\n\\n    function test() public {\\n        arr = [1, 2, 3, 4];\\n\\n        remove(1);\\n        // [1, 4, 3]\\n        assert(arr.length == 3);\\n        assert(arr[0] == 1);\\n        assert(arr[1] == 4);\\n        assert(arr[2] == 3);\\n\\n        remove(2);\\n        // [1, 4]\\n        assert(arr.length == 2);\\n        assert(arr[0] == 1);\\n        assert(arr[1] == 4);\\n    }\\n}\\n\")), mdx(\"p\", null, \"Nesse artigo, apresentamos v\\xE1rias maneiras de utilizar o mapeamento de vari\\xE1veis com o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"mapping\"), \" e o armazenamento de dados com o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"array\")), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Mapping e Arrays","description":"Nesse artigo iremos abordar como funcionam os `mapping` e `arrays` no Solidity, bem como, quando utilizá-los em seu contrato inteligente.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAbKN2FGD/8QAGRAAAgMBAAAAAAAAAAAAAAAAAhEBBBIQ/9oACAEBAAEFAhlWD2Ii85h8/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGxABAAIDAQEAAAAAAAAAAAAAAQARAjFRAxD/2gAIAQEABj8CR9FyyujkUvJ5C9ywL7N/P//EABwQAAICAgMAAAAAAAAAAAAAAAERACEQMUFR8f/aAAgBAQABPyFjII6CUrHCnCIgpLE1YPpcR8Y//9oADAMBAAIAAwAAABDAz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB8QAQEAAgEEAwAAAAAAAAAAAAERACFBEDFRYYGR0f/aAAgBAQABPxAbJgaY0Jw/nvHCNpNfbGIMFJR+NZvkaJKjxc33sOI6f//Z","aspectRatio":1.5151515151515151,"src":"/static/2850ed1823770eb7913a15c4620cb2da/0cb3d/capa.jpg","srcSet":"/static/2850ed1823770eb7913a15c4620cb2da/f836f/capa.jpg 200w,\n/static/2850ed1823770eb7913a15c4620cb2da/2244e/capa.jpg 400w,\n/static/2850ed1823770eb7913a15c4620cb2da/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Iniciante"],"author":["Matheus"],"suburl":"mapping-arrays/","publishedAt":"10/05/2022","modifiedAt":"20220510"},"tableOfContents":{"items":[{"url":"#mapping-mapas","title":"Mapping (Mapas)"},{"url":"#array-matrizes","title":"Array (Matrizes)","items":[{"url":"#exemplos-de-remoção-de-elemento-da-matriz","title":"Exemplos de remoção de elemento da matriz"},{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"mapping-arrays/","postTopics":["Iniciante"],"publishedAt":"10/05/2022","prevArticle":{"title":"If, Else, For e While","layout":"BlogPage","suburl":"if-else-for-while/","author":["Matheus"],"tags":["Iniciante"],"publishedAt":"08/05/2022","modifiedAt":"20220508"},"nextArticle":{"title":"Enum - Enumeradores","layout":"BlogPage","suburl":"enum/","author":["Matheus"],"tags":["Iniciante","Intermediário"],"publishedAt":"11/05/2022","modifiedAt":"20220511"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}